package com.wingice.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wingice.common.page.EntityPageBean;
import com.wingice.system.entity.SysDictionary;
import com.wingice.system.entity.SysDictionaryItem;
import com.wingice.system.vo.dictionary.DictionaryView;
import com.wingice.system.vo.dictionary.SysDictionaryView;

import java.util.List;
import java.util.Map;

public interface SysDictionaryService extends IService<SysDictionary> {

    /**
     * @param idList 待删除id列表
     * @description 批量删除字典类型
     * @author 胡昊
     * @email huhao9277@gmail.com
     * @date 2021/3/5 12:40
     */
    Boolean deleteBatch(List<String> idList);

    /**
     * @param entityPageBean 分页查询信息
     * @description 分页查询字典类型
     * @author 胡昊
     * @email huhao9277@gmail.com
     * @date 2021/3/5 12:52
     */
    Page<SysDictionaryView> page(EntityPageBean<SysDictionary> entityPageBean);


    /**
     * 根据module或的原数据列表
     *
     * @param code 字典code
     * @return 字典信息对象集合
     * @date 2021/3/31 10:55
     */
    List<SysDictionaryItem> getList(String code);

    /**
     * 根据module或的原数据列表MAP
     *
     * @param codeList 字典code集合
     * @return 字典信息对象集合Map module - itemList
     * @date 2021/3/31 10:55
     */
    Map<String, List<SysDictionaryItem>> getListMap(List<String> codeList);

    /**
     * 根据code 获得展示类列表
     *
     * @param code 字典code
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    List<DictionaryView> getDictionaryList(String code);

    /**
     * 根据code 获得展示类列表
     *
     * @param code    字典code
     * @param reverse 是否反转
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    List<DictionaryView> getDictionaryList(String code, boolean reverse);

    /**
     * 根据code 获得展示类列表Map
     *
     * @param codeList 字典code集合
     * @return 字典信息展示对象集合Map
     * @date 2021/3/31 10:55
     */
    Map<String, List<DictionaryView>> getDictionaryListMap(List<String> codeList);

    /**
     * 根据code 获得展示类列表Map
     *
     * @param codeList 字典code集合
     * @param reverse  是否反转 key value 互换
     * @return 字典信息展示对象集合Map
     * @date 2021/3/31 10:55
     */
    Map<String, List<DictionaryView>> getDictionaryListMap(List<String> codeList, boolean reverse);

    /**
     * 根据code 获得字典项值的集合
     *
     * @param code 字典code
     * @return 获得字典项值的集合
     * @date 2021/3/31 10:55
     */
    List<String> getDictionaryValueList(String code);

    /**
     * 根据code 获得字典项值Map的集合
     *
     * @param codeList 字典codeList
     * @return 获得字典项值的集合
     * @date 2021/3/31 10:55
     */
    Map<String, List<String>> getDictionaryValueListMap(List<String> codeList);

    /**
     * 根据code 获得字典项map
     *
     * @param code 字典code
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    Map<String, String> getDictionaryMap(String code);

    /**
     * 根据code 获得字典项map
     *
     * @param code    字典code
     * @param reverse 是否反转 key value 互换
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    Map<String, String> getDictionaryMap(String code, boolean reverse);

    /**
     * 根据code 获得字典项map 根据字典code进行分组
     *
     * @param codeList 字典code
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    Map<String, Map<String, String>> getDictionaryMapMap(List<String> codeList);

    /**
     * 根据code 获得字典项map 根据字典code进行分组
     *
     * @param codeList 字典code集合
     * @param reverse  是否反转 key value 互换
     * @return 字典信息展示对象集合
     * @date 2021/3/31 10:55
     */
    Map<String, Map<String, String>> getDictionaryMapMap(List<String> codeList, boolean reverse);

    /**
     * @param reverse 是否key和value反转
     * @description 获取系统字典缓存
     * @author 胡昊
     * @email huhao9277@gmail.com
     * @date 2022/4/11 16:24
     */
    List<SysDictionaryView> listAllDictionaryView(boolean reverse);
}
